***************** Replication of Franchino, Fabio, and Camilla Mariotto. “Bargaining Outcomes and Success in EU Economic Governance Reforms”. Political Science Research and Methods.

* Step 1 to reproduce Figure A4

version 16

******************************* SENSITIVITY ANALYSIS
*************   COMPUTING POINT PREDICTIONS: Mean Model  (10% selected)
clear all
gen mad=.
save mad_mean.dta, replace

set seed 1234

local v = 0
while `v' <= 1000 {
* Upload original dataset
use NBSmodel_data.dta, clear
gen m_mean = 0
gen utility_star = .
gen utility = .
order utility utility_star m_mean

* Modify 20% of actors's positions
/* We test for unsystematic mis-categorization following the re-categorization test proposed by Eric Neumayer and Thomas Plümper.
We have drawn a random sample of twenty percent of the positions. We have then increased by 25 points the position for half of these cases (if it is not located on upper bound) and decreased by 25 points the other half (if it is not located on the lower bound).
We have then estimated the model outcomes. The procedure is repeated for 1,000 samples
*/
***** Select a random sample without replacement of observations
***** change 4 out of 35
generate random = runiform()
sort random
do meaningful_shift_comm.do
drop random

generate random = runiform()
sort random
do meaningful_shift_ep_1.do
drop random

do meaningful_shift_country.do

* Gradient ascent procedure
local i = 0
while `i' <= 100 {
replace utility =	-	(`i'-	country1	)^2 if	salience1	> 0 &	salience1	!= .
replace utility = utility + (	-	(`i'-	country2	)^2) if	salience2	> 0 &	salience2	!= .
replace utility = utility + (	-	(`i'-	country3	)^2) if	salience3	> 0 &	salience3	!= .
replace utility = utility + (	-	(`i'-	country4	)^2) if	salience4	> 0 &	salience4	!= .
replace utility = utility + (	-	(`i'-	country5	)^2) if	salience5	> 0 &	salience5	!= .
replace utility = utility + (	-	(`i'-	country6	)^2) if	salience6	> 0 &	salience6	!= .
replace utility = utility + (	-	(`i'-	country7	)^2) if	salience7	> 0 &	salience7	!= .
replace utility = utility + (	-	(`i'-	country8	)^2) if	salience8	> 0 &	salience8	!= .
replace utility = utility + (	-	(`i'-	country9	)^2) if	salience9	> 0 &	salience9	!= .
replace utility = utility + (	-	(`i'-	country10	)^2) if	salience10	> 0 &	salience10	!= .
replace utility = utility + (	-	(`i'-	country11	)^2) if	salience11	> 0 &	salience11	!= .
replace utility = utility + (	-	(`i'-	country12	)^2) if	salience12	> 0 &	salience12	!= .
replace utility = utility + (	-	(`i'-	country13	)^2) if	salience13	> 0 &	salience13	!= .
replace utility = utility + (	-	(`i'-	country14	)^2) if	salience14	> 0 &	salience14	!= .
replace utility = utility + (	-	(`i'-	country15	)^2) if	salience15	> 0 &	salience15	!= .
replace utility = utility + (	-	(`i'-	country16	)^2) if	salience16	> 0 &	salience16	!= .
replace utility = utility + (	-	(`i'-	country17	)^2) if	salience17	> 0 &	salience17	!= .
replace utility = utility + (	-	(`i'-	country18	)^2) if	salience18	> 0 &	salience18	!= .
replace utility = utility + (	-	(`i'-	country19	)^2) if	salience19	> 0 &	salience19	!= .
replace utility = utility + (	-	(`i'-	country20	)^2) if	salience20	> 0 &	salience20	!= .
replace utility = utility + (	-	(`i'-	country21	)^2) if	salience21	> 0 &	salience21	!= .
replace utility = utility + (	-	(`i'-	country22	)^2) if	salience22	> 0 &	salience22	!= .
replace utility = utility + (	-	(`i'-	country23	)^2) if	salience23	> 0 &	salience23	!= .
replace utility = utility + (	-	(`i'-	country24	)^2) if	salience24	> 0 &	salience24	!= .
replace utility = utility + (	-	(`i'-	country25	)^2) if	salience25	> 0 &	salience25	!= .
replace utility = utility + (	-	(`i'-	country26	)^2) if	salience26	> 0 &	salience26	!= .
replace utility = utility + (	-	(`i'-	country27	)^2) if	salience27	> 0 &	salience27	!= .

* comm and ep positions (exclude if we want only country positions)
replace utility = utility + (	-	(`i'-	comm	)^2)
replace utility = utility + (	-	(`i'-	ep_1	)^2) if	ep_rule==2

replace utility_star = utility if `i'==0
replace m_mean = `i' if utility > utility_star
replace utility_star = utility if utility > utility_star

local i = `i' + 1
}

order utility utility_star m_mean sq outcome
sort act issue_id
label variable m_mean "mean model solution"
label variable utility_star "maximized sum of actors' utilities" 

* Compute means of absolute differences between outcomes and model predictions
gen mad=abs(m_mean-outcome)
collapse mad
label variable mad "mean of absolute differences" 
append using mad_mean.dta
save mad_mean.dta, replace
sleep 200
local v = `v' + 1
}

use mad_mean.dta, clear
mean mad
kdensity mad, nor normopts(lwidth(vvthin)) graphregion(fcolor(white)) legend(off) ytitle("") xtitle("") text(0.4 19 "mean 21.3" "s.e. 0.02", si(small)place(e)) title("Mean", si(small)) note("") ylabel(,labsize(small)) xlabel(,labsize(small)) saving(mean, replace)

